package com.cqupt.service;

import com.cqupt.pojo.Host;
import com.cqupt.pojo.Interface;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public interface HostService {
    /**
     * 获取主机组 1
     * @param token
     * @return
     */
    public List<Map<String, Object>> getGroups(final String token);

    /**
     * 获取所有主机 1
     * @param token
     * @param type
     * @param avail
     * @return
     */
    public List<Map<String, Object>> getAllHosts(final String token,final String type,final String avail);

    /**
     * 筛选获得可用的主机信息
     * @param token
     * @return
     */
    public List<Map<String, Object>> getAvailableAllHosts(final String token);

    /**
     * 筛选获得不可用的主机信息
     * @param token
     * @return
     */
    public List<Map<String, Object>> getUnAvailableAllHosts(final String token);

    /**
     * 筛选获得所有服务器类型主机
     * @param token
     * @return
     */
    public List<Map<String,Object>> getServerAllHosts(final String token);

    /**
     * 筛选获得网络设备类型主机
     * @param token
     * @return
     */
    public List<Map<String,Object>> getOtherAllHosts(final String token);

    //获取某个主机（通过hostid，修改信息回显用） 1
    public List<Map<String, Object>> getHostByHostid(final String token, String hostid);

    //获取所有模板 1
    public List<Map<String, Object>> getTemplates(final String token);

    //获取与指定主机关联的监控项的个数 1
    public Map<String, Integer> getItemCount(final String token, final List<String> hostids);

    //获取与指定主机关联的触发器的个数 1
    public Integer getTriggerCount(final String token, final String hostids);

    //添加主机 添加成功返回主机id 1
    public Map<String, Object> addHost(final String token, final String host, final String description, final Interface inter, final String systemType,final HashMap<String,String> inventory);

    //获得模板id
    public Map<String, Object> getTemplate(final String token,final String templateName);

    //封装添加主机的部分参数 1
    public List<HashMap<String, String>> makeCreateHostNeededParams(final String paramType, final List<String> params);

    //删除主机 1
    public Map<String, Object> deleteHost(final String token, final String hostid);

    //获取主机状态属性 1
    public List<Map<String, Object>> getHostStatusById(final String token, final String host);

    // 重载-同时查询多个主机,且根据主机hostid查询
    List<Map<String, Object>> getHostStatusById(List<String> hostids);

    //获取某个主机所属的所有主机组信息
    public List<Map<String, Object>> getHostGroups(final String token,final String host);

    //获取某个主机所属的所有模板信息
    public List<Map<String, Object>> getHostTemplates(final String token,final String hostId);

    //获取某个主机使用接口的所有数据
    public Map<String, Object> getHostInterfaces(final String token,final String hostId);

    //删除与某个主机连接的模板
    public Map<String, Object> deleteHostTemp(final String token, final String hostid, final List<Map<String, Object>> oldTemplates);

    //更新主机
    public Map<String, Object> updateHost(final String token, final String hostid, String host, final Interface inter,final String description);

    //删除主机接口
    public Map<String, Object> deleteInterface(final String token, final List<Map<String, Object>> interfaces);

    //修改主机接口
    public Map<String,Object> updateInterface(final String token, final Interface inter);

    //创建主机模板
    String createTemplate(int groupid, String templateName, String description);

    //获取某个主机的（特定的）自动发现规则
    public List<Map<String, Object>> getDRulesByHostid(final String token, final String hostid,final String systemType);

    //禁用某个主机的自动发现规则
    public Map<String, Object> deleteDRulesByItemid(final String token, final String[] dRules);

    // 根据主机hostid获取用户名及密码
    public Host getUserInfoById(String hostId);

    public void insertHostInfo(Host host);

    // 根据hostid修改用户名和密码
    public int  updateHostInfo(Host hostInfo);

    //查询SNMP的自动发现规则
    public List<Map<String, Object>> getDRulesByTemplateid(final String token,final String templateId);

    //根据tempalteid开启自动发现规则
    public Map<String, Object> activeDRulesByTemplateid(final String token, final String[] dRules);

    //立即执行发现规则
    public Map<String, Object> DRulesChecknow(final String token, final String[] dRules);

    //还原发现规则中的默认delay
    public Map<String, Object> DRulesReset(final String token, final String[] dRules);

    //根据主机id查询的自动发现规则
    public List<Map<String, Object>> getActiveDRulesByHostid(final String token, final String hostid, final String systemType);

    //获取主机资产清单
    public  Map<String, Object> getHostInventory(final String token, final String hostid);

    // 获取所有在线服务器主机的id
    public List<Map<String, Object>> get_all_host_imporant(final String token);

    // 获取所有在线网络设备主机的id
    public List<Map<String, Object>> get_all_snmp_host_imporant(final String token);
    // 根据主机获得ip:port和主机名字
    public List<Map<String, Object>> get_details_by_hostid(final String token, final String hostid);

    //根据主机获得主机名字
    public String get_name_by_hostid( final String hostid);

    // 根据id找发现规则
    public List<Map<String, Object>> getNetDRulesByHostid(final String hostid);

    // 设置延迟时长
    public Map<String, Object> setDRulesDelay(final String[] dRules,final String delayTime);

    // 根据查询条件筛选对应主机
    List<Map<String, Object>> getFilterAllHosts(String token, String type, String avail, String queryString);

    // 根据IP获取所有的主机
    List<String> getAllHostsByIp(String token, String ip);

    // 更具指定Hotids的过滤
    List<Map<String, Object>> getFilterAllHosts_ip(String token, String type, String avail, List<String> queryFilterHostids);

    // 判断主机操作系统类型
    int checkSystemType(String hostid);

    // 获取某个主机的各项运行指标
    Map<String, Object> getHostRunDateils(String hostid);

    // 获取主机详细接口
    Map<String, Object> getHostRunDateils_api();
}
